﻿using System;
using System.Collections.Generic;
using Inventione.Framework.BusinessLogic;
using Inventione.Framework.DataAccess.Exceptions;
using Inventione.Outsourcing.DataAccess;
using Inventione.Outsourcing.DataLinq;
using Inventione.Framework.BusinessLogic.Exceptions;

namespace Inventione.Outsourcing.BusinessLogic
{
    public class BLMotivoDesocupacao : BLBase
    {
        // Representa o objeto de acesso a dados
        private DAMotivoDesocupacao da = null;

        /// <summary>
        /// Construtor padrão
        /// </summary>
        public BLMotivoDesocupacao()
            : base("DEFAULT")
        {
            da = new DAMotivoDesocupacao("DEFAULT");
        }

        /// <summary>
        /// Construtor utilizando o cliente
        /// </summary>
        /// <param name="tenantId">Identificador do cliente</param>
        public BLMotivoDesocupacao(string tenantId)
            :base(tenantId)
        {
            da = new DAMotivoDesocupacao(tenantId);
        }



        /// <summary>
        /// Consulta motivos de desocupação (utilizando vários critérios opcionais)
        /// </summary>
        /// <param name="cdMotivo">Código do motivo</param>
        /// <param name="dsMotivo">Descrição do motico</param>
        /// <param name="inAtivo">Indicador se está ativo ou inativo (S/N)</param>
        /// <param name="maximumRows">Quantidade máxima de linhas de retorno</param>
        /// <param name="startRowIndex">Linha inicial de retorno</param>
        /// <param name="sortExpression">Compo para ordenação</param>
        /// <returns>Lista de motivo desocupação</returns>
        public List<MOTIVO_DESOCUPACAO> consultarMotivoDesocupacao(int cdMotivo, string dsMotivo, string inAtivo, int maximumRows, int startRowIndex, string sortExpression)
        {
            List<MOTIVO_DESOCUPACAO> retorno = null;

            try
            {
                retorno = this.da.consultarMotivosDesocupacao(cdMotivo, dsMotivo, inAtivo, maximumRows, startRowIndex, sortExpression);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Consulta motivos de desocupação (utilizando vários critérios opcionais)
        /// </summary>
        /// <param name="cdMotivo">Código do motivo</param>
        /// <param name="dsMotivo">Descrição do motivo</param>
        /// <param name="inAtivo">Indicador se está ativo ou inativo (S/N)</param>
        /// <returns>Quantidade de registros que atigindo pela consulta</returns>
        public int consultarMotivoDesocupacaoCount(int cdMotivo, string dsMotivo, string inAtivo)
        {
            int retorno = 0;

            try
            {
                retorno = da.consultarMotivosDesocupacaoCount(cdMotivo, dsMotivo, inAtivo);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Obtem um motivo de desocupação
        /// </summary>
        /// <param name="cdMotivo">Código do motivo</param>
        /// <returns>Entidade motivo desocupação</returns>
        public MOTIVO_DESOCUPACAO obterMotivoDesocupacao(int cdMotivo)
        {
            MOTIVO_DESOCUPACAO retorno = null;

            try
            {
                retorno = da.obterMotivoDesocupacao(cdMotivo);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Obtem um motivo desocupação
        /// </summary>
        /// <param name="cdMotivo">Código do motivo</param>
        /// <returns>Lista contendo um motivo desocupação</returns>
        public List<MOTIVO_DESOCUPACAO> listarMotivoDesocupacao(int cdMotivo)
        {
            List<MOTIVO_DESOCUPACAO> retorno = null;

            try
            {
                retorno = this.da.listarMotivoDesocupacao(cdMotivo);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }
        


        #region Métodos para Combos

        /// <summary>
        /// Lista os motivos de desocupação ativos
        /// </summary>
        /// <returns>Lista de motivo de desocupação</returns>
        public List<TOCombo> listarMotivosOcupacaoAtivos()
        {
            List<TOCombo> retorno = null;

            try
            {
                retorno = this.da.listarMotivosDesocupacaoAtivos();
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        #endregion


        #region Métodos básicos - CRUD

        /// <summary>
        /// Insere um motivo de desocupação
        /// </summary>
        /// <param name="entity">Entidade motivo desocupação</param>
        /// <returns>Sigla da unidade federativa</returns>
        public int inserirMotivoDesocupacao(MOTIVO_DESOCUPACAO entity)
        {
            int retorno = 0;

            try
            {
                retorno = this.da.inserirMotivoDesocupacao(entity);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }

            return retorno;
        }

        /// <summary>
        /// Atualiza os dados de um motivo desocupação
        /// </summary>
        /// <param name="entity">Entidade motivo desocupação</param>
        public void atualizarMotivoDesocupacao(MOTIVO_DESOCUPACAO entity)
        {
            try
            {
                this.da.atualizarMotivoDesocupacao(entity);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }
        }

        /// <summary>
        /// Exclui um motivo de desocupação
        /// </summary>
        /// <param name="entity">Entidade motivo desocupação</param>
        public void excluirMotivoDesocupacao(MOTIVO_DESOCUPACAO entity)
        {
            try
            {
                this.da.excluirMotivoDesocupacao(entity);
            }
            catch (Exception ex)
            {
                throw new BLException(ex, true);
            }
        }

        #endregion

    }
}
